package com.hgsoft.pubsv.component.base.redis;

import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

/**
 * redis 公共方法
 * @author saint-yeb
 *
 */
@Component
public abstract class RedisCommon {

	@Autowired
	protected StringRedisTemplate stringRedisTemplate;
	
	 /**
     * 指定缓存失效时间
     * @param key 键
     * @param time 时间(秒)
     * @return
     */
	public boolean expire(String key, long time) {
	    try {
	        if (time > 0) {
	            stringRedisTemplate.expire(key, time, TimeUnit.SECONDS);
	        }
	        return true;
	    } catch (Exception e) {
	        e.printStackTrace();
	        return false;
	    }
	}
    /**
     * 根据key 获取过期时间
     * @param key 键 不能为null
     * @return 时间(秒) 返回0代表为永久有效
     */
	public long getExpire(String key) {
	    return stringRedisTemplate.getExpire(key, TimeUnit.SECONDS);
	}
    /**
     * 判断key是否存在
     * @param key 键
     * @return true 存在 false不存在
     */
	public boolean hasKey(String key) {
	    try {
	        return stringRedisTemplate.hasKey(key);
	    } catch (Exception e) {
	        e.printStackTrace();
	        return false;
	    }
	}
    /**
     * 删除缓存
     * @param key 可以传一个值 或多个
     */
	@SuppressWarnings("unchecked")
	public void del(String... key) {
	    if (key != null && key.length > 0) {
	        if (key.length == 1) {
	            stringRedisTemplate.delete(key[0]);
	        } else {
	            stringRedisTemplate.delete(CollectionUtils.arrayToList(key));
	        }
	    }
	}
	
	/**
	 * 获取数量
	 * @param key
	 * @return
	 */
	public Integer size(String key) {
		return stringRedisTemplate.keys(key).size();
	}
	
	/**
	 * 模糊查询获取所有key值
	 * @param pattern
	 * @return
	 */
	public Set<String> keys(String pattern){
		return stringRedisTemplate.keys(pattern);
	}
}
